libobs_wrapper\data\properties/
prop_impl.rs1use std::collections::HashMap;
2
3use crate::{
4 data::output::ObsOutputRef,
5 runtime::ObsRuntime,
6 sources::ObsSourceRef,
7 unsafe_send::Sendable,
8 utils::{ObsError, ObsString},
9};
10
11use super::{get_properties_inner, ObsProperty, ObsPropertyObject, ObsPropertyObjectPrivate};
12
13impl ObsPropertyObject for ObsSourceRef {
14 fn get_properties(&self) -> Result<HashMap<String, ObsProperty>, ObsError> {
15 let properties_raw = self.get_properties_raw()?;
16 get_properties_inner(properties_raw, self.runtime.clone())
17 }
18}
19
20impl ObsPropertyObjectPrivate for ObsSourceRef {
21 fn get_properties_raw(&self) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
22 let source_ptr = self.source.clone();
23 self.runtime
24 .run_with_obs_result(move || unsafe {
25 let source_ptr = source_ptr;
26
27 Sendable(libobs::obs_source_properties(source_ptr.0))
28 })
29 .map_err(|e| ObsError::InvocationError(e.to_string()))
30 }
31
32 fn get_properties_by_id_raw<T: Into<ObsString> + Sync + Send>(
33 id: T,
34 runtime: ObsRuntime,
35 ) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
36 let id: ObsString = id.into();
37 let id_ptr = id.as_ptr();
38 runtime
39 .run_with_obs_result(move || unsafe {
40 let id_ptr = id_ptr;
41 Sendable(libobs::obs_get_source_properties(id_ptr.0))
42 })
43 .map_err(|e| ObsError::InvocationError(e.to_string()))
44 }
45}
46
47impl ObsPropertyObject for ObsOutputRef {
48 fn get_properties(&self) -> Result<HashMap<String, ObsProperty>, ObsError> {
49 let properties_raw = self.get_properties_raw()?;
50 get_properties_inner(properties_raw, self.runtime.clone())
51 }
52}
53
54impl ObsPropertyObjectPrivate for ObsOutputRef {
55 fn get_properties_raw(&self) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
56 let output_ptr = self.output.clone();
57 self.runtime
58 .run_with_obs_result(move || unsafe {
59 let output_ptr = output_ptr;
60
61 Sendable(libobs::obs_output_properties(output_ptr.0))
62 })
63 .map_err(|e| ObsError::InvocationError(e.to_string()))
64 }
65
66 fn get_properties_by_id_raw<T: Into<ObsString> + Sync + Send>(
67 id: T,
68 runtime: ObsRuntime,
69 ) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
70 let id: ObsString = id.into();
71 let id_ptr = id.as_ptr();
72 runtime
73 .run_with_obs_result(move || unsafe {
74 let id_ptr = id_ptr;
75
76 Sendable(libobs::obs_get_output_properties(id_ptr.0))
77 })
78 .map_err(|e| ObsError::InvocationError(e.to_string()))
79 }
80}